/*------------------------------------------------------------------------
Общие функции------------------------------------------------*/
/*--Удаление протатипа*/
function fc_deleteProt(obj)
{
	$(obj).parents('form:first').find('.editor_block .add_prototype,.attaches.add_prototype').remove().end().submit();
}
/*--замена идентификаторов в имени*/
function form_control_replace_names(obj,source,data)
{
	return obj.find(':input').each(function(){
			inp=$(this);
			name=inp.attr('name');
			if(typeof name !='undefined')
			inp.attr('name',(''+name).replace(source,data));
		}).end();
}
/*--Исправление не работоспособности label*/
form_control_label_count=0;
function form_control_repair_labels(obj)
{
	return obj.find('label').each(function(){
			l=$(this);
			if(l.attr('for') )
			{
				che=l.find('#'+l.attr('for'));
				if(che.attr('id'))
				{
					id='fc_l'+form_control_label_count++;
					l.attr('for',id);
					che.attr('id',id);
				}
			}
		}).end();		
}

/*--Кнопки контрольной панели*/
var form_control_array=new Array();
/*--Обработка клика по кнопкам управления*/
function form_control_function(obj,prote,param)
{		
	b=$(obj);
	form=b.parents('.editor_block:first');
	bType=b.attr('btype');
	/*Необходимость показать кнопки отмены и ок*/
	var show_ok_cencel_buttons=true;
	switch(bType)
	{
		case'edit'://Запускаю функцию для текущей формы
			func=window['fc_edit_'+form.attr('id')];
			show_ok_cencel_buttons=func(form);
		break;
		case'delete':
			func=window['fc_delete_'+form.attr('id')];
			show_ok_cencel_buttons=func(form);
		case'sort':				
		break;
		case'copy':
			form.find('.t_check:checked').each(function(){
				
			});
		break;
		case 'add'://Добавляю поле по прототипу
			//Если есть добчерний прототип то нужно добавить его 
			prot=b.parents('.prot_parent:first').find('.add_prototype.'+prote+':first');
			if(!prot.length)
				prot=$(form).find('.add_prototype.'+prote+':first');
			//Общее количество созданных полей
			added_count=form.attr('added_count')*1;
			if(!added_count)
			{
				form.attr('added_count','1');
				added_count=0;
			}
			else form.attr('added_count',added_count+1);
			//Клонирую прототип и добавляю перед
			clone=form_control_repair_labels(form_control_replace_names(prot.clone().removeClass('add_prototype').addClass('prot_parent'),param,'a-'+added_count)).insertBefore(prot);
			clone_h=clone.outerHeight(true);
		//clone.hide().animate({'height':'show'});
			$(document).scrollTop($(document).scrollTop()+clone_h);
		break;
	}
	/*Если нужно показываю кнопки отмена и ок*/
	if(show_ok_cencel_buttons)
		form.find('.form_control:first')
			.find('.right').fadeIn().end()
			.find(':hidden').attr('name','form_control_action').val('bType');
}

/*--Преобразование в редактируемые поля*/
var form_control_get_edit_counts=0;
function form_control_get_edit(obj,name,params)
{
	val=obj.attr('v');
	//Список допустимых значений
	values=(params['values']?params['values']:new Array());
	type=(params['type']?params['type']:'text');
	
	t_class_s=(params['class']?params['class']:'');
	t_class='';
	if(t_class_s)
		t_class='" class="'+t_class_s;
	attr=(params['attr']?params['attr']:'');
	field='';
	
	//Описание
	desc=(params['desc']?params['desc']:'');
	t='text';
	mode='';
	switch(type)
	{
		case 'textarea':
				field='<textarea name="'+name+t_class+(desc?'" placeholder="'+desc:'')+'">'+obj.text()
				+'</textarea> ';
		break;
		case 'checkbox':	
				field='<label for="cb-'+form_control_get_edit_counts+'"><input type="checkbox" name="'+name
					+t_class
					+(val?'" checked="checked':'')
					+'" id="cb-'+(form_control_get_edit_counts++)+'" />'+desc+'</label>';
		break;
		case 'multicheckbox':
			type='checkbox';
		case 'radio':
			end=count(values)-2;
			i=0;
			separator=isset(params['separator'])?params['separator']:' ';
			if(t_class)field='<div class="'+t_class_s+'>';
			field+="desc ";
			for(value in values)
			{
				field+='<label for="cb-'+form_control_get_edit_counts+'"><input type="'+type
					+'" name="'+name
					+'" value="'+value+(val==value?'" checked="checked':'')
					+'" id="cb-'+(form_control_get_edit_counts++ )+'" />'+values[value]+'</label>'
					+(i++<end?separator:'');
			}
			if(t_class)field+='</div>';
		break;
		case 'multiselect':
			mode='" multiple="multiple';
		case 'select':
			field='<select name="'+name+mode+t_class+'">';
			if(desc)field+='<option value="">'+desc+'</option>';
			for(value in values)
				field+='<option value="'+value
					+(val==value?'" selected="selected':'')+'">'+values[value]+'</option>';
			field+='</select> ';	
		break;
		case 'dee-select':
			value=(values[val].length)?'" value="'+val:'';
			field='<div class="dee-select '+t_class_s
				+'"><input type="text'+(value?'" value="'+values[val]:'')
				+'" /><div class="arrow">&nbsp;</div><input type="hidden" name="'
				+name+value+'" />	<div class="options">';
				for(value in values)
					field+='<div class="option" v="'+value+'">'+values[value]+'</div>';
				field+='</div>	</div> ';
		break;
		case 'datetime':
			mode=',true';
		case 'date':
			field='<input type="'+t+'" onclick="dee_date_time_object.show(this'+mode+')" readonly="readonly" class="'+type+' '+t_class_s+'" name="'+name
				+(desc?'" placeholder="'+desc:'')
				+'" value="'+obj.text()+'"/> ';
		break;
		case 'password':
			t='password';
		case 'int':
		case 'email':
		case 'phone':				
		case 'text':
		default:
			field='<input type="'+t+'" class="'+type+' '+t_class_s+'" name="'+name
				+(desc?'" placeholder="'+desc:'')
				+'" value="'+obj.text()+'"/> ';
		break;
	}
	$(obj).replaceWith(field);	
}

/*------------------------------------------------------------------------
Редактируемые поля ---------------------------------------------------*/
/*--редактирование */
function fc_edit_selectable(form)
{
	//группы выбранные для редактирования
	groups=form.find('.group_name .delete:checked').parents('.group').addClass('to_edit');
	form.find('.group:not(.to_edit,.add_prototype),.to_save button.ok').remove();
	var field_prot=false;
	if(groups.length)
		field_prot=form.find('.group.add_prototype .field.add_prototype,.group.add_prototype tr.last');
	groups
		/*Показываю спрятанное*/
		.find('.hidden').removeClass('hidden').end()
		/*Удаляю все не нужные элементы форм */
		.find(':input,label').remove().end()
		.each(function(ind,group){
			g=$(group);
			g_id=g.attr('id');
			g_name=form.attr('f_name')+'['+g_id+']';	
			/*Преобразую в редактируемые поля*/
			form_control_get_edit(g.find('.group_name span.editable.name'),g_name+'[group_name]',{'desc':'Название группы'});
			form_control_get_edit(g.find('.group_name span.editable.name_sys'),g_name+'[group_name_sys]',{'desc':'Сис. название'});		
			g.find('table')
				.append(form_control_repair_labels(form_control_replace_names(field_prot.clone(),'#',g_id))).end()
				.find('tr:not(.add_prototype)').addClass('prot_parent').each(function(){
					f=$(this);
					f_id=f.attr('id');
					f_name=g_name+'[fields]['+f_id+']';
					form_control_get_edit(f.find('span.editable.name'),f_name+'[name]',{'desc':'Название поля'});
					form_control_get_edit(f.find('span.editable.name_sys'),f_name+'[name_sys]',{'desc':'Сис. название'});
					form_control_get_edit(f.find('.type span.editable'),f_name+'[type]',{'type':'select','desc':'Тип поля','values':selectable_fields_types});
					
					f.find('div.value').each(function(){
						v=$(this);
						v_name=f_name+'[values]['+v.attr('id')+']';
						form_control_get_edit(v.find('span.editable.val'),v_name+'[val]',{'desc':'Значние'});
						form_control_get_edit(v.find('span.editable.val_sys'),v_name+'[val_sys]',{'desc':'Сис. значение'});
						form_control_get_edit(v.find('.def span.editable'),v_name+'[def]',{'type':'checkbox','desc':'По умолч.'});
					});
					f.find('td.values').append(form_control_repair_labels(form_control_replace_names(g.find('.add_prototype.field').find('.add_prototype.value:first,td.values .button.add:first').clone(),'@',f_id)));
				});
			
		});
	return groups.length;
}
/*--Удаление групп и полей*/ 
function fc_delete_selectable(form)
{
	return form.find('.to_save')
		.find(':input:not(.delete)').remove().end()
		.find('input.delete').removeClass('hidden').removeClass('edit').show().length;
	
}


/*------------------------------------------------------------------------
Редактор таблиц------------------------------------------------------*/
/*--Функция скрытия и показа фильтра*/
function te_filterShowHide(obj)
{
	o=$(obj);
	filter=o.parents('.table_editor:first').find('table .filter');
	if(filter.css('display')=='none')
		filter.show();
	else
	{
		filter.find(':input').val('');
		o.parents('form').find('.add_prototype').remove().end().submit();
	}
}
/*--чек селекта по клику на строку*/
function te_check_row(obj)
{
	obj=$(obj);
	che=obj.find('input.delete');
	if(che.length)
	{
		if(che.parent().css('display')!='none')
		{
			checked=!che.prop('checked');
			che.prop('checked',checked);
			if(checked)
				obj.addClass('checked_row');
			else
				obj.removeClass('checked_row');
		}
		
	}
}
/*--Удаление*/
function fc_delete_table_editor(form)
{
	return form.find('.to_save').addClass('delete')
		.find(':input:not(.delete)').remove().end()
		.find('input.delete').removeClass('edit').show().length;	 
}
/*--Редактирование*/
function fc_edit_table_editor(form)
{
	table=form.find('table');
	/*Ничего не выбрано*/
	if(!table.find('.edit.delete:checked').length)
	{
		dee_corner.quick_message('Вы не выбрали не одной записи','error');
		return false;
	}
	fields=[];
	ind=0;
	form_index=form.attr('count');
	form_name=form.attr('name');
	table
		.find('.hidden').removeClass('hidden').end()
		.find('.head td').each(function(){
			obj=$(this);
			if(obj.attr('name'))
				fields[ind++]=obj.attr('name');
		}).end()
		.find('tbody tr:not(.add_prototype,.prot_parent)').find(':input:not(button.add)').remove().end().filter('.checked_row').addClass('row').each(function(){
			row=$(this);
			row_id=row.attr('f_id');
			row.find('.editable').each(function(ind){
				if(typeof fe_fiedlds_arr[form_index][fields[ind]] !='undefined')
				{
					params=fe_fiedlds_arr[form_index][fields[ind]];
					if(typeof params['to_edit']=='undefined')
					form_control_get_edit($(this),form_name+'[edit]['+row_id+']['+fields[ind]+']',params);
				}
			});
		});
		
	return true;
}
/*--функция добавления*/
function te_add_func(obj)
{
	obj=$(obj);
	obj.parents('.editor_block:first').find('tbody tr:not(.row)').remove().end().find('.hidden').removeClass('hidden');
}




/*------------------------------------------------------------------------
Редактор страниц-----------------------------------------------------*/

/*--Редактирование*/
function fc_edit_page_edit(form)
{
	form
		.find('textarea,input:not(.disabled)').removeAttr('readonly').removeAttr('disabled').end()
		.find('select,button').removeAttr('disabled').end()
		.find('.disabled').removeClass('disabled');
	return form;
}
/*--Окно выбора раздела*/
 function PageEditor()
{
	 this.win=false;
	 this.input_obj=false;
	 this.hidden_obj=false;	 
	 this.page_id=false;
	 this.field_descs=false;
	 this.block_count=0;
	 /*Первый запрос*/
	this.getSelect=function (obj,page_id)
	{
	
		this.input_obj=$(obj);
		if(!this.input_obj.hasClass('disabled'))
		{
			
			this.page_id=page_id;
			this.hidden_obj=this.input_obj.parent().find('.desc').addClass('loading').end()
									.find('.new:hidden');
			curr_parens=this.hidden_obj.val();		
			$.post('/admin/?ajax=get_select_page_parents',{'current':curr_parens,'page_id':this.page_id},this.viewData);
		}
		
	};
	/*Обработка первого запроса*/
	this.viewData= function (data)
	{
		$().modal_win({'cont':'<div class="parent_cont">'+data+'</div>','title':'Выберите раздел','width':'500px','height':'600px','delete_on_close':true,'close_on':'button#catalog_select_ok','t_class':'select_parents'},true);
		stopLoading();
	};
	/*Клик для смены катлога*/
	this.changeCatalog= function (obj,parents)
	{
		this.win=$(obj).addClass('loading').parents('.parent_cont');
		$.post('/admin/?ajax=get_select_page_parents',{'current':parents,'page_id':this.page_id},this.updatePagesList);		
	};
	/*Ответ на обновление каталога*/
	this.updatePagesList =function (data)
	{
		page_editor.win.html(data);
	};
	/*Клик по кнопке выбора раздела*/
	this.ok =function (parents,text)
	{
		this.input_obj.val(text);
		this.hidden_obj.val(parents);
		this.win.parents('#modal_win').find('#modal_win_close').click();
		this.input_obj=false;
		this.hidden_obj=false;
		this.win=false;
		this.page_id=false;
	};
	/*Изменить изменить набор аттачей при смене шаблона*/
	this.changeTempl=function(obj)
	{
		obj=$(obj);
		templ=obj.val();
		editor=obj.parents('.page-editor');
		editor.find('.attaches_place').html('').append(fc_edit_page_edit(editor.find('.attaches .attach-'+templ).clone().find('.hidden').removeClass('hidden').end()));
		if(this.field_descs)
		{
			 arr_name=(typeof this.field_descs[templ] !='undefined')?templ:'defaults';
				for(key in this.field_descs[arr_name])
				{
					editor.find('.templ_param_name-'+key).text(this.field_descs[arr_name][key]);
				}
		}			
	};
	/*Добавить приложение*/
	this.addAttach=function(obj)
	{
		this.input_obj=$(obj);
		select_obj=this.input_obj.parent().find('select');
		type=select_obj.val();
		editor=this.input_obj.parents('.page-editor');
		if(type=='block')
		{
			this.input_obj.find('div').addClass('loading');
			$.post('/admin/?ajax=page_attach_block',{'block':{'get_block_list':1}},page_editor.showBlockList);
		}
		else
		{
			class_name='._'+type+'_load';
			if(editor.find(class_name).css('display')=='none')
				editor.find(class_name).fadeIn().find('button').removeAttr('disabled').removeClass('hidden');
			else
				dee_corner.quick_message('Вы уже можете добавить '+select_obj.find('option:selected').text(),'notice');
		}
	};
	this.showBlockList=function(data)
	{
		$().modal_win({'cont':'<div class="parent_cont">'+data+'</div>','title':'Выберите блок','width':'500px','height':'600px','delete_on_close':true,'close_on':'button#block_select_ok','t_class':'select_parents'},true);
		stopLoading();
	};
	this.selectBlock=function(obj,block_name)
	{
		obj=$(obj);
		this.win=obj.parents('#modal_win');
		obj.addClass('loading');
		$.post('/admin/?ajax=page_attach_block',{'block':{'get_block':block_name,'index':this.block_count++}},this.addBlock);
	};
	this.addBlock=function(data)
	{
		page_editor.win.find('#modal_win_close').click();
		page_editor.win=false;
		page_editor.input_obj.parents('.page-editor').find('.attaches_place').append(form_control_repair_labels(fc_edit_page_edit($(data)).find('.hidden').removeClass('hidden').end()));
	};
	this.deleteBlock=function(obj,field_name)
	{
		obj=$(obj);
		if(!obj.hasClass('disabled'))
			obj.parents('.block').replaceWith('<input type="hidden" name="'+field_name+'" value="delete" />');
	};
}
var page_editor=new PageEditor();
var fc_one_button=false;
/*--Назначение событий*/
$(document).ready(function(){
					
	
	$('.form_control')
	/*клик по кнопке активации*/
	.find('.activate').click(function(){
		a=$(this);
		form_control=a.hide().parents('.form_control:first');
		form=form_control
			/*Анимация подсказок*/
			.find('button').hover(function(){		
				$(this).find('div').animate({'width':'show'});
				},function(){                            
				$(this).find('div').hide();			
			})
			.not('.right').click(function(){ form_control_function(this)}).end()
			/*Клик по кнопке отмена откатывает изменения */
			.filter('.cencel').click(function(){
				form=$(this).parents('.form_control:first').find('.ok').removeAttr('name').end().find('.right').fadeOut().end().parents('.editor_block:first');
				id=form.attr('clone_id');		
				if(id)	form.find('.to_save').replaceWith(form_control_array[id].clone());				
			}).end()
			/*Клик по кнопке ОК отправляет форму*/
			.filter('.ok').click(function(){
				fc_deleteProt(this);
			}).end().end()
			/*Показываю кнопки добавления и чекбокс редактирования*/
			.parents('.editor_block:first').addClass('active')
				.find('.to_save button.add.hidden').removeClass('hidden').end();	
				
		/*Клонирую форму для отката*/	
		if(!form.attr('clone_id'))
		{
			ind=form_control_array.length;
			form.attr('clone_id',ind);
			form_control_array[ind]=form.find('.to_save').clone();
		}
		/*Кнопки управления в правый верхний угол*/	
		dee_corner.fly(form_control);
		buttons=form_control.find('button:not(.right)');
		elog(fc_one_button?'da':'net');
		if(fc_one_button && buttons.length==1)
			buttons.click(); 
	});
	
	$('.table_editor .to_save tr').attr('onclick','te_check_row(this);');
	
	$('.send_brand_sort_list').click(function(){
 		$('.send_brand_sort_list').attr('disabled','disabled');
		$('#success_save_brand_list').html('');
			$.ajax({
				type	: 'POST',
				cache	: false,
				url		: '/admin/?ajax=update_brands_sort',
				data	: $('form').serializeArray(),
				success	: function( response ) {
					$('.send_brand_sort_list').removeAttr('disabled');
					$('#success_save_brand_list').html( response );
				}
			});
		return false;
	});
	
	
	
	
	
	
});